Categorías destacadas
programacion php    
Artículo
19
¡votar!

 Acceso a Bases de Datos [JDBC]


Actualizar una Hoja de Resultados Programáticamente

Una actualización es la modificación del valor de una columna de la fila actual. Supongamos que queremos aumentar el precio del café "French Roast Decaf" a 10.99. utilizando el API JDBC 1.0, la actualización podría ser algo como esto.

stmt.executeUpdate("UPDATE COFFEES SET PRICE = 10.99" +
		   "WHERE COF_NAME = FRENCH_ROAST_DECAF");

El siguiente fragmento de código muesta otra forma de realizar la actualización, esta vez utilizando el API JDBC 2.0.

uprs.last();
uprs.updateFloat("PRICE", 10.99);

Las operaciones de actualización en el API JDBC 2.0 afectan a los valores de columna de la fila en la que se encuentra el cursor, por eso en le primera línea se llama al método last para mover el cursor a la última fila (la fila donde la columna COF_NAME tiene el valor FRENCH_ROAST_DECAF). Una vez situado el cursor, todos los métodos de actualización que llamemos operarán sobre esa fila hasta que movamos el cursor a otra fila. La segunda línea de código cambia el valor de la columna PRICE a 10.99 llamando al método updateFloat. Se utiliza este método porque el valor de la columna que queremos actualizar es un float Java.

Los métodos updateXXX de ResultSet toman dos parámetros: la columna a actualizar y el nuevo valor a colocar en ella. Al igual que en los métodos getXXX de ResultSet., el parámetro que designa la columna podría ser el nombre de la columna o el número de la columna. Existe un método updateXXX diferente para cada tipo (updateString, updateBigDecimal, updateInt, etc.)

En este punto, el precio en uprs para "French Roast Decaf" será 10.99, pero el precio en la tabla COFFEES de la base de datos será todavía 9.99. Para que la actualización tenga efecto en la base de datos y no sólo en la hoja de resultados, debemos llamar al método updateRow de ResultSet. Aquí está el código para actualizar tanto uprs como COFFEES.

uprs.last();
uprs.updateFloat("PRICE", 10.99);
uprs.updateRow();

Si hubiéramos movido el cursor a una fila diferente antes de llamar al método updateRow, la actualización se habría perdido. Si, por el contrario, nos damos cuenta de que el precio debería haber sido 10.79 en vez de 10.99 podríamos haber cancelado la actualización llamando al método cancelRowUpdates. Tenemos que llamar al método cancelRowUpdates antes de llamar al método updateRow; una vez que se llama a updateRow, llamar a cancelRowUpdates no hará nada. Observa que cancelRowUpdates cancela todas las actualizaciones en una fila, por eso, si había muchas llamadas a método updateXXX en la misma fila, no podemos cancelar sólo una de ellas. El siguiente fragmento de código primero cancela el precio 10.99 y luego lo actualiza a 10.79.

uprs.last();
uprs.updateFloat("PRICE", 10.99);
uprs.cancelRowUpdates();
uprs.updateFloat("PRICE", 10.79);
uprs.updateRow();

En este ejemplo, sólo se había actualizado una columna, pero podemos llamar a un método updateXXX apropiado para cada una de las columnas de la fila. El concepto a recordar es que las actualizaciones y las operaciones relacionadas se aplican sobre la fila en la que se encuentra el cursor. Incluso si hay muchas llamadas a métodos updateXXX, sólo se hace una llamada al método updateRow para actualizar la base de datos con todos los cambios realizados en la fila actual.

Si también queremos actualizar el precio de COLOMBIAN_DECAF, tenemos que mover el cursor a la fila que contiene ese café. Cómo la fila de COLOMBIAN_DECAF precede inmediatamente a la fila de FRENCH_ROAST_DECAF, podemos llamar al método previous para posicionar el cursor en la fila de COLOMBIAN_DECAF. El siguiente fragmento de código cambia el precio de esa fila a 9.79 tanto en la hoja de resultados como en la base de datos.

uprs.previous();
uprs.updateFloat("PRICE", 9.79);
uprs.updateRow();

Todos los movimientos de cursor se refieren a filas del objeto ResultSet, no a filas de la tabla de la base de datos. Si una petición selecciona cinco filas de la tabla de la base de datos, habrá cinco filas en la hoja de resultados, con la primera fila siendo la fila 1, la sengunda siendo la fila 2, etc. La fila 1 puede ser identificada como la primera, y, en una hoja de resultados con cinco filas, la fila 5 será la última.

El orden de las filas en la hoja de resultados no tiene nada que ver con el orden de las filas en la tablas de la base de datos. De hecho, el orden de las filas en la tabla de la base de datos es indeterminado. El controlador de la base de datos sigue la pista de las filas seleccionadas, y hace las actualizaciones en la fila apropiada, pero podrían estar localizadas en cualquier lugar de la tabla. Cuando se inserta una fila, por ejemplo, no hay forma de saber donde será insertada dentro de la tabla.

Publicado por:
Ricard Lou Torrijos
Recomendar
a un amigo
Compartir
en redes
 
Comentarios
Gus_Unad dice:

Saludos Ricard. Muchas gracias por el exelente aporte era lo que estaba buscando. Si me pudieras facilitar la aplicacion completa de la que hablas aca te lo agradeceria muchisimo, ya mire el link pero ya no esta ha de ser por el tiempo que ha pasado. Nuevamente MIL GRACIAS

14/06/2010, a las 05:25:29
 
BBDD
Entornos de desarrollo
Entretenimiento
Herramientas
Internet
Lenguajes de script
Lenguajes imperativos
Lenguajes orientados a objeto
Otros lenguajes
Plataformas
Teoría
Varios
Copyright © 1998-2011 Programación en Castellano. Todos los derechos reservados
Datos legales | Politica de privacidad | Contacte con nosotros | Publicidad

Diseño web y desarrollo web. Un proyecto de los hermanos Carrero.

Red internet:
Juegos gratis | Servidores dedicados
Más internet: Password | Directorio de weblogs | Favicon